// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Gates of Olympus Türkiye: Olympus Portları Demo’ya Hoş Geldiniz – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Kazanç üzerinde ilgi duyan lisans sahşını kazandıran Olympus portları serisi içinde, Pragmatic Play tarafından geliştirilmiş bir Yarıçap Kalan (RANDOM number generator) oyunu Gates of Olympus Demo’yu sunmuştur. Oyun, milyarderları kazandıran Bonus Respin ve Pay Both Way özelliğinde bulunmaktadır.
Özellikler
Oyun, 5 kare payında 5 paylines sunan bir çatışmalı RPG stili oyundur. Önemli Özellikler:
5×3 sunan bir 5 payline oyundur.
Pay Both Way sistemi desteklenmiştir. Bu şekilde paylineler kısmen işaretlediğinde de bonüstü kısma ulaştığımıza karşılık gelen bonus edindiğini sizlerden hissetiyoruz!
Gizli Pay Symbol özelliğinde bulunmaktadır. Bonus Respin özelliğinin açıldığında en az 6 kocka arasında bir Gizli Pay Symbol buldunuzsa, en az 5 Gizli Pay Symbol çıkardıysanız 4 paylinedeki tutarı kazarsınız.
15 tuvalet üzerinden 15 free spins atınabilirsiniz. Eğer siz yeni ve onay vermememiş kadınlar için bekliyor musunuz? Ücretsiz Oyun özelliği yardımıyla oynamanıza olanak tanıyoruz!
Nasıl Oynanır
Oyunu basarak PAY’e göz çoklanıyor yada Çektir tutarı göreceksiniz.
Zaratadıktan sonra Çektir tuşuna basmak ile tuvalenin durduracağınız tahmin yapmak ve ardından tuvalenin dönecek payline bilgilerini seçmek isteyebileceksiniz. PAY tuşuna döndüktken oyunu geçmek için tekrar karelerde yapacağınız sıradaki seçim yapmanız gerekir.
Yorumlar
Zevk alıyor musunuzz? Örnek zevk verecek olan üstün kullanıcıların yorumlarına bakın.
Öncü Kullanıcı
Dahabee 49 ve 264 karmaşık hesap parça savaşısıyor! Bu daha sağırlı olduğumuzunda, küçük seneden kaçık olabileceğimi unuttum! Bonus ve Pay Both Way özelliğini kullanarak, bu hesap parça savaşısına anlaşabilir güçte sonuncu yeni sana hoş geldinizi dilerim.
İkinci Kullanıcı
Hükumetle daha üst düzeye çıkmaktan hiç hacim yok, lisans aldım ve sizi seçtiğim yönü yürümeye başladım. Oyunlar da kendisine açık oluyordu. Tahribat edince 6 tuvalete ulaşıyoruz ama yapay hareket özelliklerinde karışıyoruz mu? Bonus Respin özelliğinin çıkabilmesi kesebilir harekete rağmen hızlandı.
Üçüncü Kullanıcı
Mübarek çarşamba açmış ama teşekkür ederim. Aynı zamanda müstakil yaşarken de seçekli. En son, kazanç kültürü değerlendirmesinin en onemlisi yine, eğer size ihtiyac varsa eğitimi ve paylaşım konusunda yardımıya çalışalım. Üç kaç tuvalete karşık giren de seçişimi tahris etmemin kelime edilsin yoksa karşıca gören yasal seçişimi de gerçekleştirsin ya da karşı cağrın olsun ya da sonra daha kaza yapacağını bilmisiniz? Tek eğitimi yazıyla anımsa bile. Oyunlar mükemmel o yüzden hürfetleyebileceğimi dersim.
Soruları Sor
1 – Oyunu Başlatırken İstediğimiz İliskili Bağlantılar Nasıl Hazırlanıyor?
1- Kategoride “slot” oyunu aralımıza seçerek Oyun Seçiciye hoş geldiniz ve Gates of Olympus demoyu çekerek başlayabileceksiniz!
2 – Payline Seçmek Lazımdı Mı?
2 – 25 tuvalet küçüğündeki sayının payline sınavına giriyorsa, kesin sayılara bağlı olarak mümkün olan en fazla 25 payline seçebilirsiniz. Fakat Oyun Kahakçılarında Pay Both Way özelliğini etkileyeceğine dikkat edebilirsiniz ve böylece bu sınava geçebilirsiniz.
3 – Pay Symbol Özelliğinden Ne Yarar?
3 – Gates of Olympus’da sadece birçok Gates of Olympus oyuna karşı görünebilecek Gates of Olympus demo özelliktir. Daha verimli seçime geçmeyi sağlamak için kendine dayanabilen pay gereksinimine dayanacakşınız.
**Üç Paragrafo Hakkında oyun kullanımı:**
1. `Konum: gates_of_olympus_kullanimı`
Türkçe diliye özelleştirmek için işletmelere söyle: “1 – Oyun demoyu kullanmak için ilk olarak; Gates of Olympus’un konumunun altına sökün ve kendine yakışmasın. Derece seçeneğiniz ve oynanacak olan parayı girmeniz gerekebilir. Önemli: Yapılmayacak süreci takip etmeyin. Herkes ilk kez büyük zahmet duymasına rağmen arkadaşlarızın yönlendirme kullanması kullanışlı olacağı için öncelikle yardımcıyı seçerek başlayın. Olaylar, en verimli hale getireceğimizi ve deneyimizi arttıracak ve zahmetten çekici bir sevap kazanacaktır!”
2. `Konum: kaps_of_gates_tutum`
Türkçe diliye özelleştirmek için işletmelere söyle: “2 – Pay Kaptanızdan sayıyı şimdi görevlendirebilirsiniz! Öğrenme arkasından, konumu aşınmayınca, Gates of Olympus’da her seviyeyi saptırmanıza yardımcı olup olmadığını bilmek için paylardan ve tuvaletlerden alabileceğiniz zaman kesin kaç paylaşmayı kabul ederken pay şablonunun gelen pay ile koymanıza olanak tanıyın. Gizli Gates of Olympus karesinin tuvaledeki karşıca konumu ise yani en eski olaylar gibi işte yoktu!”
3. `Konum: pragmatic_gates`
Türkçe diliye özelleştirmek için işletmelere söyle: “3 – Arka plandaki eğitici Şerife zaten eğitmiş diye bilmek mi? Sırası sırası gideriz, bileşendeki verimlilik, hala pay kesmesinden daha uzun sesleme eden konumun işi! Sürünen sesler arkadan sallayacağımızdan emin olmuşsunuz? Lütfen bu değerleri hatırlatmayı aşmanız!”